package com.demo.yuanzi.controller;

import cn.dev33.satoken.annotation.*;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/test/")
public class TestController {
    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            StpUtil.getRoleList();
            StpUtil.getPermissionList();
            int loginIdAsInt = StpUtil.getLoginIdAsInt();
            System.out.println(loginIdAsInt);
            return "登录成功";
        }
        return "登录失败";
    }
    //// 获取：当前账号所拥有的角色集合
    //StpUtil.getRoleList();
    //
    //// 判断：当前账号是否拥有指定角色, 返回 true 或 false



    //StpUtil.hasRole("super-admin");
    //
    //// 校验：当前账号是否含有指定角色标识, 如果验证未通过，则抛出异常: NotRoleException
    //StpUtil.checkRole("super-admin");
    //
    //// 校验：当前账号是否含有指定角色标识 [指定多个，必须全部验证通过]
    //StpUtil.checkRoleAnd("super-admin", "shop-admin");
    //
    //// 校验：当前账号是否含有指定角色标识 [指定多个，只要其一验证通过即可]
    //StpUtil.checkRoleOr("super-admin", "shop-admin");

    // 查询登录状态，浏览器访问： http://localhost:8081/user/isLogin
    @RequestMapping("isLogin")
    public String isLogin() {
        List<String> permissionList = StpUtil.getPermissionList();
        permissionList.forEach(System.out::println);
        return "当前会话是否登录：" + StpUtil.isLogin();
    }
    // 查询 Token 信息  ---- http://localhost:8081/acc/tokenInfo
    @RequestMapping("tokenInfo")
    public SaResult tokenInfo() {
        return SaResult.data(StpUtil.getTokenInfo());
    }

    // 测试注销  ---- http://localhost:8081/acc/logout
    @RequestMapping("logout")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }
//    // 登录校验：只有登录之后才能进入该方法
    @SaCheckLogin
    @RequestMapping("info")
    public String info() {
        return "查询用户信息";
    }
//
    // 角色校验：必须具有指定角色才能进入该方法
    @SaCheckRole("super-admin")
    @RequestMapping("/add")
    public String add() {
        return "用户增加";
    }
//    // 权限校验：必须具有指定权限才能进入该方法
//    @SaCheckPermission("user-add")
//    @RequestMapping("add1")
//    public String add1() {
//        return "用户增加";
//    }
//
//    // 二级认证校验：必须二级认证之后才能进入该方法
//    @SaCheckSafe()
//    @RequestMapping("add2")
//    public String add2() {
//        return "用户增加";
//    }
//
//    // Http Basic 校验：只有通过 Basic 认证后才能进入该方法
//    @SaCheckBasic(account = "sa:123456")
//    @RequestMapping("add3")
//    public String add3() {
//        return "用户增加";
//    }
//    // 校验当前账号是否被封禁 comment 服务，如果已被封禁会抛出异常，无法进入方法
//    @SaCheckDisable("comment4")
//    @RequestMapping("send")
//    public String send() {
//        return "查询用户信息";
//    }
//    // 此接口加上了 @SaIgnore 可以游客访问
//    @SaIgnore
//    @RequestMapping("getList")
//    public SaResult getList() {
//        // ...
//        return SaResult.ok();
//    }

}
